//
//  PPNetworkService.h
//  pickpic
//
//  Created by GaoYongyue on 16/9/9.
//  Copyright © 2016年 MicroDream. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface PPNetworkService : NSObject

#pragma mark - 相册管理部分接口
/**
 *  创建相册
 *
 *  @param albumTitle      相册标题
 *  @param albumDesc       相册说明描述文字
 *  @param privacy         隐私设置，1:所有人可见;2:仅自己可见;4:所有朋友可见;8:选中的朋友可见;16:选中的朋友不可见;
 *  @param privacySettings 当隐私设置为8或者16时，为选中的朋友列表
 *  @param commentSetting  是否可以评论，1可以，2不可以
 *  @param tags            标签id的数组
 *  @param pictures        以本地文件名作为客户端标识
 *  @param order           排序方式，0时间正序，1时间逆序
 *  @param callback        回调
 */
+ (void)createAlbumWithTitle:(NSString *)albumTitle
                        desc:(NSString *)albumDesc
                     privacy:(NSNumber *)privacy
             privacySettings:(NSArray *)privacySettings
              commentSetting:(NSNumber *)commentSetting
                        tags:(NSArray *)tags
                     hotTags:(NSArray *)hotTags
                    pictures:(NSArray *)pictures
                       order:(NSNumber *)order
                    callback:(CompleteCallback)callback;


/**
 *  获取我的相册信息
 *  当所有参数都为空时，返回该用户所有的全部相册
 *  否则，则按照给定参数进行联合查询，并返回符合条件的相册
 *
 *  @param keyword  搜索关键字，可以为空
 *  @param ablumIDs 相册ID数组，可以为空
 *  @param tagID    标签id
 *  @param isHotTag 标签是否为热门标签
 *  @param callback 回调
 */
+ (void)fetchMyAlbumsWithKeyword:(NSString *)keyword
                        ablumIDs:(NSArray *)ablumIDs
                           tagID:(NSNumber *)tagID
                        isHotTag:(NSNumber *)isHotTag
                           owner:(PPUserID)owner
                        pageSize:(NSInteger)pageSize
                       pageIndex:(NSInteger)pageIndex
                        callback:(CompleteCallback)callback;


/**
 *  获取他人相册信息
 *
 *  @param ownerUserID 被查看的userid
 *  @param callback    回调
 */
+ (void)fetchAlbumsWithOwnerUserID:(PPUserID)ownerUserID
                          pageSize:(NSInteger)pageSize
                         pageIndex:(NSInteger)pageIndex
                          callback:(CompleteCallback)callback;


/**
 *  删除相册
 *
 *  @param albumID  相册ID
 *  @param callback 回调
 */
+ (void)deleteAlbumWithAlbumID:(NSNumber *)albumID callback:(CompleteCallback)callback;


/**
 *  更新编辑相册
 *  编辑相册信息接口是为了更新相册自身的信息，而不涉及到相册内图片的信息，关于图片的操作有单独的接口。
 *
 *  @param albumID         相册id
 *  @param albumTitle      相册标题
 *  @param albumDesc       相册说明描述文字
 *  @param privacy         隐私设置，1:所有人可见;2:仅自己可见;4:所有朋友可见;8:选中的朋友可见;16:选中的朋友不可见
 *  @param privacySettings 当隐私设置为8或者16时，为选中的朋友列表，其他则忽略此字段
 *  @param commentSetting  是否可以评论，1可以，2不可以
 *  @param coverImg        七牛的资源key
 *  @param tags            标签id的数组
 *  @param order           排序方式，0时间正序，1时间逆序
 *  @param callback        回调
 */
+ (void)updateAlbumWithAlbumID:(NSNumber *)albumID
                    albumTitle:(NSString *)albumTitle
                     albumDesc:(NSString *)albumDesc
                       privacy:(NSNumber *)privacy
               privacySettings:(NSArray *)privacySettings
                commentSetting:(NSNumber *)commentSetting
                      coverKey:(NSString *)coverKey
                     coverHost:(NSString *)coverHost
                          tags:(NSArray *)tags
                       hotTags:(NSArray *)hotTags
                         order:(NSNumber *)order
                      callback:(CompleteCallback)callback;


/**
 *  向相册里添加图片
 *
 *  @param albumID  相册id
 *  @param pictures 以本地文件名作为客户端标识
 *  @param callback 回调
 */
+ (void)addPictureToAlbum:(NSNumber *)albumID
                 pictures:(NSArray *)pictures
                 callback:(CompleteCallback)callback;


/**
 *  从相册里删除图片
 *
 *  @param albumID   相册id
 *  @param pictures 图片id 数组
 *  @param callback  回调
 */
+ (void)deletePictureFromAlbum:(NSNumber *)albumID
                      pictures:(NSArray *)pictures
                      callback:(CompleteCallback)callback;

/**
 *  编辑图片信息
 *
 *  @param albumID     相册id
 *  @param pictureID   图片id
 *  @param pictureDesc 更新的描述描述描述
 *  @param callback    回调
 */
+ (void)updatePictureDescInAlbumID:(NSNumber *)albumID
                         pictureID:(NSNumber *)pictureID
                       pictureDesc:(NSString *)pictureDesc
                          callback:(CompleteCallback)callback;


/**
 *  获取热门标签
 *
 *  @param callback 回调
 */
+ (void)fetchHotTagsWithCallback:(CompleteCallback)callback;


/**
 *  获得用户个人标签列表
 *
 *  @param callback 回调
 */
+ (void)fetchUserCreatedTagsWithCallback:(CompleteCallback)callback;

/**
 *  创建用户标签
 *
 *  @param names    ["我的标签1","我的标签2","我的标签3"]
 *  @param callback 回调
 */
+ (void)createTagWithNames:(NSArray *)names
                  callback:(CompleteCallback)callback;


#pragma mark - 社交部分接口
/**
 *  获得关注列表
 *  0是all,1是朋友，2是妙友
 *  @param start 分页起始id,如果省略则从最新开始
 *  @param limit 分页大小，如果省略则使用默认的50
 *  @param callback 回调
 */
+ (void)fetchFollowListWithTargetUserID:(PPUserID)targetUserID
                                   type:(NSInteger)type
                                  start:(NSNumber *)start
                                  limit:(NSInteger)limit
                               callback:(CompleteCallback)callback;

/**
 *  获得粉丝列表
 *
 *  @param start 分页起始id,如果省略则从最新开始
 *  @param limit 分页大小，如果省略则使用默认的50
 *  @param callback 回调
 */
+ (void)fetchFanListWithTargetUserID:(PPUserID)targetUserID
                               start:(NSNumber *)start
                               limit:(NSInteger)limit
                            callback:(CompleteCallback)callback;


/**
 *  关注某个用户
 *
 *  @param tagetUserID 当前用户id
 *  @param callback    要关注的用户id
 */
+ (void)follow:(PPUserID)tagetUserID
      callback:(CompleteCallback)callback;


/**
 *  取消关注某个用户
 *
 *  @param tagetUserID 当前用户id
 *  @param callback    取消关注某个用户
 */
+ (void)unFollow:(PPUserID)tagetUserID
        callback:(CompleteCallback)callback;

/**
 *  获取投诉列表
 *
 *  @param callback 回调
 */
+ (void)fetchComplainListWithCallback:(CompleteCallback)callback;

/**
 *  创建投诉
 *
 *  @param complaintType 投诉类型1:图册;2:图片;4:用户;8:评论;
 *  @param releationID   对应相册id,或图片id,或用户id,或评论id.
 *  @param content       投诉内容 非必须，只有是其他的时候才传
 *  @param category      类型
 *  @param callback      回调
 */
+ (void)createComplaintWithType:(NSNumber *)complaintType
                    releationID:(NSNumber *)releationID
                        content:(NSString *)content
                       category:(NSNumber *)category
                       callback:(CompleteCallback)callback;


/**
 *  获取消息概要
 *
 *  @param onlyUnread                 如果为true，则只取未读消息，如果为空则取全部
 *  @param after                      只取这个时间之后的消息概要，如果为空则不按日期过滤
 *  @param callback                   回调
 */
+ (void)fetchMessageSummaryWithOnlyUnread:(BOOL)onlyUnread
                                    after:(NSNumber *)after
                                 callback:(CompleteCallback)callback;
/**
 *  获取消息
 *  此方法会按时间逆序（越晚的消息越在前面）返回size个消息，分页机制是通过before实现的，例如：
 *  第一次查询：before = null，size = 50 返回最新的50条消息
 *  第二次查询：before = 第一次查询中第50条消息的时间，size=50，返回第51-100条消息（如果存在100条）
 *  以此类推

 另外，返回的所有消息将标记为已读。
 *
 *  @param type       opType对应为社交功能页面的五类消息类型，MyNotify对应主页，Friend对应朋友，Follow对应妙人，Discovery对应发现，MyFavorite对应收藏。
 *  @param before     时间
 *  @param size       每次请求的个数
 *  @param onlyUnread 当获取妙人或者好友页面消息时，将onlyunread设置成false，并配合before分页，可以实现feed流，其他页面建议设置onlyunread为true以减少服务器压力
 *  @param callback   回调
 */
+ (void)fetchMyMessageListWithType:(NSString *)type
                            before:(NSNumber *)before
                              size:(NSInteger)size
                        onlyUnread:(BOOL)onlyUnread
                          callback:(CompleteCallback)callback;


/**
 *  获得收藏的相册列表
 *  audit代表审核信息 //1:通过;2:未通过;4:审核中;8:未审核
 *  @param callback 回调
 */
+ (void)fetchMyFavouriteListWithPage:(NSInteger)page
                               count:(NSInteger)count
                            callback:(CompleteCallback)callback;

/**
 *  收藏某个相册
 *
 *  @param albumID  要收藏的相册id
 *  @param callback 回调
 */
+ (void)favouriteAlbumID:(NSNumber *)albumID
                 version:(NSString *)version
                callback:(CompleteCallback)callback;


/**
 *  取消收藏某个相册
 *
 *  @param albumID  要取消收藏的相册id
 *  @param callback 回调
 */
+ (void)unFavouriteAlbumID:(NSNumber *)albumID
                   version:(NSString *)version
                  callback:(CompleteCallback)callback;

/**
 *  获得收藏某个相册的用户列表
 *
 *  @param albumID  相册id
 *  @param callback 回调
 */
+ (void)fetchUsersForFavouriteID:(NSNumber *)ID
                           start:(NSNumber *)start
                           limit:(NSInteger)limit
                        callback:(CompleteCallback)callback;


/**
 *  获取评论
 *
 *  @param type     1代表相册，2代表图片，标识获取的是相册的评论还是单张照片的评论
 *  @param ID       根据type不同标识不同资源的id
 *  @param callback 回调
 */
+ (void)fetchCommentListWithType:(NSNumber *)type
                              ID:(NSNumber *)ID
                           start:(NSNumber *)startID
                           limit:(NSInteger)limit
                         version:(NSString *)version
                        callback:(CompleteCallback)callback;


/**
 *  发布评论
 *
 *  @param type     有效值为ablum或者picture，标识获取的是相册的评论还是单张照片的评论
 *  @param ID       根据type不同标识不同资源的id
 *  @param parentID 被回复的评论id，-1代表这条评论是直接评论给图片或相册
 *  @param content  评论内容
 *  @param callback 回调
 */
+ (void)sendCommentWithType:(NSNumber *)type
                         ID:(NSNumber *)ID
                   parentID:(NSNumber *)parentID
                    content:(NSString *)content
                    version:(NSString *)version
                   callback:(CompleteCallback)callback;


/**
 *  删除评论
 *
 *  @param commentID 评论id
 *  @param callback  回调
 */
+ (void)deleteCommentWithCommentID:(NSNumber *)commentID
                              type:(NSNumber *)type
                          callback:(CompleteCallback)callback;


/**
 *  点赞
 *
 *  @param type     有效值为ablum或者picture，标识获取的是相册的评论还是单张照片的评论
 *  @param ID       根据type不同标识不同资源的id
 *  @param callback 回调
 */
+ (void)likeWithType:(NSNumber *)type
                  ID:(NSNumber *)ID
             version:(NSString *)version
            callback:(CompleteCallback)callback;


/**
 *  取消赞
 *
 *  @param type     有效值为ablum或者picture，标识获取的是相册的评论还是单张照片的评论
 *  @param ID       根据type不同标识不同资源的id
 *  @param callback 回调
 */
+ (void)unLikeWithType:(NSNumber *)type
                    ID:(NSNumber *)ID
               version:(NSString *)version
              callback:(CompleteCallback)callback;


/**
 *  获得点赞的用户列表
 *
 *  @param type     有效值为ablum或者picture，标识获取的是相册的评论还是单张照片的评论 1相册 2图片
 *  @param ID       根据type不同标识不同资源的id
 *  @param callback 回调
 */
+ (void)fetchLikeListWithType:(NSNumber *)type
                           ID:(NSNumber *)ID
                        start:(NSNumber *)start
                        limit:(NSInteger)limit
                      version:(NSString *)version
                     callback:(CompleteCallback)callback;


/**
 *  发现
 *
 *  @param start      分页起始id，如果省略则从最新的开始
 *  @param limit     分页大小，如果省略则使用默认的50
 *  @param callback 回调
 */
+ (void)fetchDiscoverWithPage:(NSNumber *)page
                         limit:(NSNumber *)limit
                      callback:(CompleteCallback)callback;


/**
 *  搜索
 *
 *  @param page
 *  @param limit
 *  @param keyword  搜索关键字
 *  @param tagID    标签id
 *  @param callback 回调
 */
+ (void)searchWithPage:(NSNumber *)page
                 limit:(NSNumber *)limit
               keyword:(NSString *)keyword
              callback:(CompleteCallback)callback;


/**
 *  用户搜索
 *
 *  @param page
 *  @param limit
 *  @param keyword
 *  @param callback
 */
+ (void)searchUserWithPage:(NSNumber *)page
                     limit:(NSNumber *)limit
                   keyword:(NSString *)keyword
                  callback:(CompleteCallback)callback;


/**
 *  获取活动banner
 *
 *  @param callback 回调
 */
+ (void)fetchPublicBannerWithCallback:(CompleteCallback)callback;

#pragma mark - 用户相关接口
/**
 *  检查手机号码是否可以注册
 *
 *  @param callback 回调
 */
+ (void)checkPhoneNumberValidWithPhoneNumber:(NSString *)phoneNumber
                                    callback:(CompleteCallback)callback;

/**
 *  向手机发送验证码
 *
 *  @param phoneNumber 手机号码
 *  @param type 注册1,找回密码2
 *  @param callback    回调
 */
+ (void)sendVerfyCodeWithPhoneNumber:(NSString *)phoneNumber
                                type:(NSInteger)type
                            callback:(CompleteCallback)callback;


/**
 *  校验验证码
 *
 *  @param phoneNumber 手机号码
 *  @param genToken   当genToken字段为1时，接口在校验完验证码后会为该手机号生成一个临时的token，此临时token可用于密码重置;当genToken字段为0时，则代表只进行验证码校验
 *  @param callback    回调
 */
+ (void)verfyPhoneCodeWithPhoneNumber:(NSString *)phoneNumber
                             genToken:(NSNumber *)genToken
                                 code:(NSString *)code
                             callback:(CompleteCallback)callback;

/**
 *  注册用户
 *
 *  @param phoneNumber 要注册使用的的手机，必须唯一
 *  @param password    用privatekey进行MD5加密的密码
 *  @param name        用户昵称
 *  @param callback    回调
 */
+ (void)registerWithPhomeNumber:(NSString *)phoneNumber
                       password:(NSString *)password
                           name:(NSString *)name
                       fileName:(NSString *)fileName
                       callback:(CompleteCallback)callback;
//+ (void)registerWithPhomeNumber:(NSString *)phoneNumber
//                       password:(NSString *)password
//                           name:(NSString *)name
//                     uploadName:(NSString *)uploadName
//                    uploadDatas:(NSArray <UIImage*>*)uploadDatas
//                       callback:(CompleteCallback)callback;
/**
 *  登录
 *
 *  @param loginType 0代表手机号登陆，1代表用pickpic号
 *  @param number    要登录的手机或者pickpick号
 *  @param password  //用privatekey进行MD5运算
 *  @param callback  回调
 */
+ (void)loginWithLoginType:(NSNumber *)loginType
               phoneNumber:(NSString *)phoneNumber
                  password:(NSString *)password
                  callback:(CompleteCallback)callback;

/**
 *  第三方登陆
 *
 *  @param thirdPartyID 第三方登陆的id
 *  @param source       用户来源: 2微信登录，4 QQ登录,8微博登陆
 *  @param name         用户昵称
 *  @param avatar       头像URL
 *  @param callback     回调
 */
+ (void)loginFromThirdWithThirdPartyID:(NSString *)thirdPartyID
                                source:(NSNumber *)source
                                  name:(NSString *)name
                                avatar:(NSString *)avatar
                                gender:(NSNumber *)gender
                                  city:(NSString *)city
                                 state:(NSString *)state
                              callback:(CompleteCallback)callback;

/**
 *  重置密码
 *
 *  说明：重置密码接口本身并不需要提供短信验证码，安全性是由被PrivateKey加密的sign字段和校验短信验证码之后的临时token保证。 所以调用此接口需要在header中填入临时token。否则将会401。
 *  @param phoneNumber 电话号码
 *  @param password    新密码
 *  @param callback    回调
 */
+ (void)resetPasswordWithPhoneNumber:(NSString *)phoneNumber
                         newPassword:(NSString *)password
                            callback:(CompleteCallback)callback;


/**
 *  更改密码
 *
 *  @param newPassword 用privatekey进行MD5加密的新密码
 *  @param oldPassword 用privatekey进行MD5加密的旧密码
 *  @param callback    回调
 */
+ (void)changePasswordWithNewPassword:(NSString *)newPassword
                          oldPassword:(NSString *)oldPassword
                             callback:(CompleteCallback)callback;

/**
 *  更新头像
 *
 *  @param fileName 头像文件名
 *  @param callback 回调
 */
+ (void)updateAvatarWithFileName:(NSString *)fileName
                        callback:(CompleteCallback)callback;

/**
 *  更新资料
 *
 *  @param name      昵称
 *  @param gender    1代表男，2代表女
 *  @param country   中国
 *  @param state     山东
 *  @param city      济南
 *  @param birthday  19920574
 *  @param signature 个人签名1123
 *  @param type      修改类型,1:昵称, 2:性别(1代表男，2代表女), 3:国家,省,城市, 4:生日, 5:签名
 *  @param callback  回调
 */
+ (void)updateProfileWithName:(NSString *)name
                       gender:(NSNumber *)gender
                      country:(NSString *)country
                        state:(NSString *)state
                         city:(NSString *)city
                     birthday:(NSString *)birthday
                    signature:(NSString *)signature
                         type:(NSInteger)type
                     callback:(CompleteCallback)callback;


/**
 *  更新消息设置
 *
 *  @param all      接受所有消息 0:否，1是，如果是1，则下面字段均忽略
 *  @param like     赞消息设置：1:所有人;2:朋友;4:关闭;
 *  @param comment  /评论消息设置：1:所有人;2:朋友;4:关闭;
 *  @param fan      关注消息设置：1打开，2关闭
 *  @param pickpick 系统消息设置：1打开，2关闭
 *  @param callback 回调
 */
+ (void)updateMessageConfigWithAll:(NSNumber *)all
                              like:(NSNumber *)like
                           comment:(NSNumber *)comment
                               fan:(NSNumber *)fan
                          pickpick:(NSNumber *)pickpick
                          callback:(CompleteCallback)callback;


/**
 *  提交反馈
 *
 *  @param content  反馈建议内容
 *  @param callback 回调
 */
+ (void)commitFeedbackWithContent:(NSString *)content
                         callback:(CompleteCallback)callback;

/**
 *  获得用户的公开信息
 *
 *  @param targetUserID 目标用户id，可以为自身。如果为自身，则除了返回公开信息外，还会返回消息设
 *  @param callback     回调
 */
+ (void)fetchPublicInfoWithTargetUserID:(PPUserID)targetUserID
                               callback:(CompleteCallback)callback;


+ (void)getAlbumDetailsByAlbumID:(NSNumber *)albumID
                        callback:(CompleteCallback)callback;

/**
 *  获取分享信息
 *
 *  @param albumID  相册id
 *  @param callback 回调
 */
+ (void)getShareInfoWithAlbumID:(NSNumber *)albumID
                       callback:(CompleteCallback)callback;

/**
 *  获取分享信息
 *
 *  @param albumID  相册id
 *  @param callback 回调
 */
+ (void)getCardShareInfoWithTargetUser:(NSNumber *)target callback:(CompleteCallback)callback;

+ (void)createAlbumFinishWithAlbumID:(NSNumber *)albumID callback:(CompleteCallback)callback;

+ (void)finishUploadingPicturesWithPictureIDs:(NSArray <NSString *> *)pictureIDs albumID:(NSNumber *)albumID callback:(CompleteCallback)callback;

/**
 * 图片下载
 */
+ (void)downLoadImgeWithUrl:(NSString *)urlString
                   callback:(CompleteCallback)callback;

/**
 *  查询电子书模版列表
 *
 *  @param
 *  @param
 */
+ (void)getEbookListWithparams:(NSDictionary *)params
                      callback:(CompleteCallback)callback;

/**
 *  生成电子书图片对应的七牛路径
 *
 *  @param
 *  @param
 */
+ (void)createEbookPicpathWithparams:(NSDictionary *)params
                         callback:(CompleteCallback)callback;
/**
 *  查询电子书列表(分页)
 *
 *  "pageInfo": {
 "page": 1, //查询第几页
 "rows": 10 //每页包含数据条数
 },
 "albumId": 1   //相册id或叫相册编号
 }
 */
+ (void)gettemplateEbookListWithparams:(NSDictionary *)params
                              callback:(CompleteCallback)callback;
/**
 *  生成或修改电子书
 *
 *  @param
 *  @param
 */
+ (void)updateEbookTemplateWithparams:(NSDictionary *)params
                             callback:(CompleteCallback)callback;



/**
 *  查询电子书
 *
 *  @param
 *  @param
 */
+ (void)queryEbookTemplateWithparams:(NSDictionary *)params
                            callback:(CompleteCallback)callback;

/**
 *  查询相册所有图片信息
 *
 *  @param
 *  @param
 */
+ (void)queryAlbumPictureids:(NSDictionary *)params
                    callback:(CompleteCallback)callback;


+ (void)updatePictureDescWithParams:(NSDictionary *)params callback:(CompleteCallback)callback;


+ (void)updateAlbumeBookWithParams:(NSDictionary *)params callback:(CompleteCallback)callback;

+ (void)deleteAlbumeBookWithAlbumID:(NSNumber *)albumID callback:(CompleteCallback)callback;

+ (void)musicListWithparams:(NSDictionary *)params
                   callback:(CompleteCallback)callback;


/**
 *  重新生成
 *
 *  @param
 *  @param
 */
+ (void)createEbookTemplateWithparams:(NSDictionary *)params
                             progress:(void (^_Nullable)(NSProgress * _Nonnull))uploadProgress
                             callback:(CompleteCallback _Nullable )callback;

/**
 *  相册背景音乐
 *
 *  @param
 *  @param
 */
+ (void)musicEbookWithparams:(NSDictionary *_Nullable)params
                    callback:(CompleteCallback _Nonnull )callback;

/**
 *  新增/更新电子书背景音乐
 *
 *  @param
 *  @param
 */
+ (void)musicBindEbookWithparams:(NSDictionary *_Nullable)params
                        callback:(CompleteCallback _Nullable )callback;

/**
 *  删除更新电子书背景音乐
 *
 *  @param
 *  @param
 */
+ (void)musicDELETEEbookWithparams:(NSNumber *)paramsID
                          callback:(CompleteCallback)callback;
@end

